home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / advc11.arc / ADVC.DOC next >
Text File  |  1987-04-23  |  15KB  |  926 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.                               ADVC v1.1, 04/22/87
  9.                              Advanced C Functions
  10.  
  11.                      Copyright (c) Thomas Hanlin III, 1987
  12.  
  13.           *Before June 1, 1987:                  *After June 1, 1987:
  14.           6812 Sydenstricker Rd                  1712 Maple Hill Place
  15.           Springfield, VA 22152                  Alexandria, VA 22302
  16.  
  17.  
  18.      These  routines  may  be  freely  distributed, provided that all files are
  19.  included  intact  and unmodified.  A distribution/handling fee of no more than
  20.  $10 may be charged.
  21.  
  22.      The  ADVC  routines  have been tested and appear to be bug-free.  However,
  23.  I can't guarantee as to whether they will work as advertised on your computer,
  24.  using  your  compiler.    Powerful  low-level access techniques are used which
  25.  could  conceivably  cause  havoc  on the wrong machines or wrong compilers, or
  26.  if  you  don't  use  them  properly.  Be warned, and don't use ADVC unless you
  27.  know what you're doing!
  28.  
  29.      The ADVC routines are grouped in files according to their type: Equipment,
  30.  Input,  Misc,  String,  Video.    In  order to use a routine, you will have to
  31.  extract it from the appropriate file using an editor.
  32.  
  33.      You are responsible for setting up any "include" files which may be neces-
  34.  sary for any given routine that you use in your program.
  35.  
  36.      These  routines  have been tested using Microsoft C, version 4.0.  A large
  37.  number  of  the  functions  provide  low-level  access  to  the machine, which
  38.  requires  use  of  nonportable  code.   You will have to convert these to your
  39.  compiler if you use something other than Microsoft C.
  40.  
  41.      These  routines  are  intended  as  a supplemental C library for folks who
  42.  have  some  idea  what  they're  doing.  They are not designed with the novice
  43.  in  mind.   If  you  don't  understand  how to use the functions, you probably
  44.  shouldn't attempt to use them just yet!
  45.  
  46.      If  you find the ADVC functions to be useful, your contribution to support
  47.  my  efforts  will  be  welcome.  Suggested amount, $15.  Strike a blow against
  48.  overpriced software-- support shareware!
  49.  
  50.      Notation: Routines  are  labeled  "Generic"  if they will work on with any
  51.  C  compiler  on any machine.  Routines are labeled "MS C" if they use features
  52.  specific to Microsoft C and/or the IBM PC environment.
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  Name: ANY2DEC
  75.  
  76.  Type: String / Generic
  77.  
  78.  Description:
  79.      Converts  a  number  in  string form, in any base (2-35), into an unsigned
  80.  integer.    No  checking  for  validity is done-- characters are assumed to be
  81.  within  the  proper  range  for  the base chosen, and the number as a whole is
  82.  assumed to be within unsigned integer range.
  83.  
  84.  Usage:
  85.      include <string.h>
  86.      int any2dec(str,base)
  87.          char *str;
  88.          unsigned int base;
  89.  
  90.  
  91.  
  92.  
  93.  Name: BSQUEEZE
  94.  
  95.  Type: String / Generic
  96.  
  97.  Description:
  98.      Squeezes  a  string  by  replacing  blanks  with a code sequence.  Assumes
  99.  an  input  string  which  only  uses normal ASCII (1-127) codes, with a length
  100.  of  less  than  127  characters.   Outputs a string which may include extended
  101.  ASCII  codes  (128-255).    Typical  space  savings for text is 15%.  A static
  102.  buffer  is  used,  so the result will be overwritten on subsequent calls.  See
  103.  also BUNSQUEEZE (not as bad as it sounds!).
  104.  
  105.  Usage:
  106.      unsigned char *bsqueeze(str)
  107.         unsigned char *str;
  108.  
  109.  Oddities:
  110.      May  not  be  entirely  generic,  as it assumes a useable character set of
  111.  at least 256 characters.
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  Name: BUNSQUEEZE
  141.  
  142.  Type: String / Generic
  143.  
  144.  Description:
  145.      Unsqueezes  a  string  which was squeezed with BSQUEEZE.  Assumes an input
  146.  string  with  a  length of less than 127 characters.  A static buffer is used,
  147.  so the result will be overwritten on subsequent calls.
  148.  
  149.  Usage:
  150.      unsigned char *bunsqueeze(str)
  151.         unsigned char *str;
  152.  
  153.  Oddities:
  154.      May  not  be  entirely  generic,  as  it  assumes  a useable character set
  155.  comprised of 256 characters.
  156.  
  157.  
  158.  
  159.  
  160.  Name: BKSCROLL
  161.  
  162.  Type: Video / MS C
  163.  
  164.  Description:
  165.      Scrolls  an  area  of  the  screen down by a specified number of lines, or
  166.  clears  it entirely if you specify zero lines.  The screen area to be scrolled
  167.  is defined by its upper left and lower right corners.
  168.  
  169.  Usage:
  170.      #include <dos.h>
  171.      void bkscroll(leftcol,toprow,rightcol,bottomrow,lines)
  172.          int leftcol, toprow, rightcol, bottomrow, lines;
  173.  
  174.  Oddities:
  175.      Uses the BIOS video interrupts.
  176.  
  177.  
  178.  
  179.  
  180.  Name: CLREOL
  181.  
  182.  Type: Video / MS C
  183.  
  184.  Description:
  185.      Clears from the current cursor position to the end of line.
  186.  
  187.  Usage:
  188.       #include <dos.h>
  189.       void clreol()
  190.  
  191.  Oddities:
  192.      Uses the BIOS video interrupts.
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  Name: COMMPORTS
  207.  
  208.  Type: Equipment / MS C
  209.  
  210.  Description:
  211.      Returns the number of communications (serial) ports that are installed.
  212.  
  213.  Usage:
  214.      #include <dos.h>
  215.      int commports()
  216.  
  217.  Oddities:
  218.      Uses a BIOS interrupt.
  219.  
  220.  
  221.  
  222.  
  223.  Name: DEC2ANY
  224.  
  225.  Type: String / Generic
  226.  
  227.  Description:
  228.      This  function  converts  an  unsigned integer into an ASCII string in the
  229.  base  of  your  choice  (2-35).    It uses a static buffer, so the result will
  230.  be overwritten on subsequent calls.
  231.  
  232.  Usage:
  233.       char *dec2any(number,base)
  234.          unsigned int number, base;
  235.  
  236.  
  237.  
  238.  
  239.  Name: DELAY
  240.  
  241.  Type: Miscellaneous / MS C
  242.  
  243.  Description:
  244.      Delays for a given number of seconds.
  245.  
  246.  Usage:
  247.       #include <stddef.h>
  248.       #include <time.h>
  249.       void delay(seconds)
  250.          unsigned int seconds;
  251.  
  252.  Oddities:
  253.      Uses  a  time  function  specific to Microsoft C, which returns the GMT as
  254.  a number of seconds.
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  Name: DISPLAYTYPE
  273.  
  274.  Type: Video / MS C
  275.  
  276.  Description:
  277.      Returns the type of the current display: 0 = mono, 1 = color.
  278.  
  279.  Usage:
  280.      #include <dos.h>
  281.      int displaytype()
  282.  
  283.  Oddities:
  284.      Uses a BIOS video interrupt.
  285.  
  286.  
  287.  
  288.  
  289.  Name: DRIVESPACE
  290.  
  291.  Type: Equipment / MS C
  292.  
  293.  Description:
  294.      Returns  the  amount  of  free space left on a given disk drive, in bytes.
  295.  Specify the drive by its letter, or use '@' for the default drive.
  296.  
  297.  Usage:
  298.      #include <ctype.h>
  299.      #include <dos.h>
  300.  
  301.  Oddities:
  302.      Uses a DOS interrupt.
  303.  
  304.  
  305.  
  306.  
  307.  Name: EXTRACT
  308.  
  309.  Type: String / Generic
  310.  
  311.  Description:
  312.      Extracts  a  delimited  substring  from a string.  Substrings are numbered
  313.  starting at one, and may not be over 80 characters in length.  A static buffer
  314.  is used for the substring, so save results if need be before the next use.
  315.  
  316.  Example usage:
  317.      extract("John Doe=1919 Main St=Springfield IL 12345",'=',2)
  318.  would  return  the  second  substring  delimited  by an equal sign, or in this
  319.  case "1919 Main St".
  320.  
  321.  Usage:
  322.       char *extract(str,delimiter,elementnumber)
  323.          char *str, delimiter;
  324.          int elementnumber;
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  Name: GETDRIVE
  339.  
  340.  Type: Equipment / MS C
  341.  
  342.  Description:
  343.      Returns the current default disk drive.
  344.  
  345.  Usage:
  346.       #include <dos.h>
  347.       char getdrive()
  348.  
  349.  Oddities:
  350.      Uses a DOS interrupt.
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  Name: GETKEY
  405.  
  406.  Type: Input / MS C
  407.  
  408.  Description:
  409.      Waits  for  one  of  a list of keys to be pressed, and returns the pressed
  410.  key.    The  list  of  valid  keys must be in uppercase; the returned key will
  411.  always  be  converted  to  uppercase.  If the list of valid keys is null, then
  412.  the first key pressed will be returned.
  413.  
  414.  Usage:
  415.       #include <conio.h>
  416.       #include <ctype.h>
  417.       char getkey(str)
  418.          char *str;
  419.  
  420.  Oddities:
  421.      Uses  unbuffered  input  to  get  a  key as soon as it's pressed.  This is
  422.  a common but nonstandard function.
  423.  
  424.  
  425.  
  426.  
  427.  Name: JOYSTICK
  428.  
  429.  Type: Equipment / MS C
  430.  
  431.  Description:
  432.      Returns the number of joystick ports installed (0-1).
  433.  
  434.  Usage:
  435.       #include <dos.h>
  436.       int joystick()
  437.  
  438.  Oddities:
  439.      Uses a BIOS interrupt.
  440.  
  441.  
  442.  
  443.  
  444.  Name: LIMMFREE
  445.  
  446.  Type: Equipment / MS C
  447.  
  448.  Description:
  449.      Returns  the  number  of free pages of installed LIM-spec expanded memory.
  450.  One page is 16k bytes.
  451.  
  452.  Usage:
  453.       #include <dos.h>
  454.       int limmfree()
  455.  
  456.  Oddities:
  457.      Uses a weird interrupt.
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  Name: LIMMTOTAL
  471.  
  472.  Type: Equipment / MS C
  473.  
  474.  Description:
  475.      Returns  the  total number of installed pages of LIM-spec expanded memory.
  476.  One page is 16k bytes.
  477.  
  478.  Usage:
  479.       #include <dos.h>
  480.       int limmtotal()
  481.  
  482.  Oddities:
  483.      Uses a weird interrupt.
  484.  
  485.  
  486.  
  487.  
  488.  Name: LOCASE
  489.  
  490.  Type: String / Generic
  491.  
  492.  Description:
  493.      Convert a string to lowercase.
  494.  
  495.  Usage:
  496.       #include <ctype.h>
  497.       char *locase(str)
  498.          char *str;
  499.  
  500.  
  501.  
  502.  
  503.  Name: MOUSEBUTTONS
  504.  
  505.  Type: Input / MS C
  506.  
  507.  Description:
  508.      See if mouse buttons are pressed.  The result is returned as follows:
  509.   0: no button pressed
  510.   1: left button is pressed
  511.   2: right button is pressed
  512.   3: both buttons are pressed
  513.  
  514.  Usage:
  515.       #include <dos.h>
  516.       int mousebuttons()
  517.  
  518.  Oddities:
  519.      Uses a weird interrupt.
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  Name: MOUSECHECK
  537.  
  538.  Type: Input / MS C
  539.  
  540.  Description:
  541.      Sees  if  a  mouse  is  installed.  If not, zero will be returned.  If so,
  542.  the  mouse  is  initialized,  and  the number of buttons the mouse has will be
  543.  returned.
  544.  
  545.  Usage:
  546.       #include <dos.h>
  547.       int mousecheck()
  548.  
  549.  Oddities:
  550.      Uses a weird interrupt.
  551.  
  552.  
  553.  
  554.  
  555.  Name: MOUSECLICK
  556.  
  557.  Type: Input / MS C
  558.  
  559.  Description:
  560.      Tells  you  if  a  mouse  button  has been clicked since you last checked.
  561.  The values returned are the same as for MOUSEBUTTONS.
  562.  
  563.  Usage:
  564.       #include <dos.h>
  565.       int mouseclick
  566.  
  567.  Oddities:
  568.      Uses a weird interrupt.
  569.  
  570.  
  571.  
  572.  
  573.  Name: MOUSECOL
  574.  
  575.  Type: Input / MS C
  576.  
  577.  Description:
  578.      Returns  the  column  where  the  mouse  cursor  is located.  See the file
  579.  MOUSE.TXT for more information (important!).
  580.  
  581.  Usage:
  582.       #include <dos.h>
  583.       int mousecol()
  584.  
  585.  Oddities:
  586.      Uses a weird interrupt.
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  Name: MOUSECURSOR
  603.  
  604.  Type: Input / MS C
  605.  
  606.  Description:
  607.      Makes  the mouse cursor visible or invisible.  Use zero to turn the cursor
  608.  off, nonzero to turn it back on.
  609.  
  610.  Usage:
  611.       #include <dos.h>
  612.       void mousecursor(toggle)
  613.          int toggle;
  614.  
  615.  Oddities:
  616.      Uses a weird interrupt.
  617.  
  618.  
  619.  
  620.  
  621.  Name: MOUSELOC
  622.  
  623.  Type: Input / MS C
  624.  
  625.  Description:
  626.      Sets  the  location  of the mouse cursor.  See the file MOUSE.TXT for more
  627.  information (important!).
  628.  
  629.  Usage:
  630.       #include <dos.h>
  631.       void mouseloc(column,row)
  632.          int column, row;
  633.  
  634.  Oddities:
  635.      Uses a weird interrupt.
  636.  
  637.  
  638.  
  639.  
  640.  Name: MOUSEROW
  641.  
  642.  Type: Input / MS C
  643.  
  644.  Description:
  645.      Returns the row where the mouse cursor is located.  See the file MOUSE.TXT
  646.  for more information (important!).
  647.  
  648.  Usage:
  649.       #include <dos.h>
  650.       int mouserow()
  651.  
  652.  Oddities:
  653.      Uses a weird interrupt.
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  Name: MULTIAND
  669.  
  670.  Type: String / Generic
  671.  
  672.  Description:
  673.      Performs  an  AND  on each character of a string with a given value.  Note
  674.  that if this results in a NUL, your string may be prematurely terminated!
  675.  
  676.  Usage:
  677.       char *multiand(str,c)
  678.          char *str, c;
  679.  
  680.  
  681.  
  682.  
  683.  Name: MULTIOR
  684.  
  685.  Type: String / Generic
  686.  
  687.  Description:
  688.      Performs an OR on each character of a string with a given value.
  689.  
  690.  Usage:
  691.       char *multior(str,c)
  692.          char *str, c;
  693.  
  694.  
  695.  
  696.  
  697.  Name: MULTIXOR
  698.  
  699.  Type: String / Generic
  700.  
  701.  Description:
  702.      Performs  an  XOR  on each character of a string with a given value.  Note
  703.  that if this results in a NUL, your string may be prematurely terminated!
  704.  
  705.  Usage:
  706.       char *multixor(str,c)
  707.          char *str, c;
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  Name: PRINTPORTS
  735.  
  736.  Type: Equipment / MS C
  737.  
  738.  Description:
  739.      Returns the number of printer (parallel) ports installed.
  740.  
  741.  Usage:
  742.       #include <dos.h>
  743.       int printports()
  744.  
  745.  Oddities:
  746.      Uses a BIOS call.
  747.  
  748.  
  749.  
  750.  
  751.  Name: REVERSE
  752.  
  753.  Type: String / Generic
  754.  
  755.  Description:
  756.      Reverses the order of characters in a string.
  757.  
  758.  Usage:
  759.       #include <string.h>
  760.       char *reverse(str)
  761.          char *str;
  762.  
  763.  
  764.  
  765.  
  766.  Name: SCROLL
  767.  
  768.  Type: Video / MS C
  769.  
  770.  Description:
  771.      Scrolls an area of the screen up by a specified number of lines, or clears
  772.  it  entirely  if  you  specify  zero lines.  The screen area to be scrolled is
  773.  defined by its upper left and lower right corners.
  774.  
  775.  Usage:
  776.      #include <dos.h>
  777.      void scroll(leftcol,toprow,rightcol,bottomrow,lines)
  778.         int leftcol, toprow, rightcol, bottomrow, lines;
  779.  
  780.  Oddities:
  781.      Uses BIOS video interrupts.
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  Name: SOUNDEX
  801.  
  802.  Type: String / Generic
  803.  
  804.  Description:
  805.      Returns a "soundex" code for a string.  This code is based on an algorithm
  806.  for  determining  words  that  sound  alike, and can be used (for instance) to
  807.  index  a  phone directory by names that sound/look similar.  The code returned
  808.  will  be  up to 80 characters long, but never longer than the string for which
  809.  the  code  was  generated.   A static buffer is used, so save the code if need
  810.  be before calling the routine a second time.
  811.  
  812.  Usage:
  813.       #include <ctype.h>
  814.       char *soundex(str)
  815.          char *str;
  816.  
  817.  
  818.  
  819.  
  820.  Name: STRIP
  821.  
  822.  Type: String / Generic
  823.  
  824.  Description:
  825.      Strips all occurrences of a given character from a given string.
  826.  
  827.  Usage:
  828.       char *strip(str,c)
  829.          char *str, c;
  830.  
  831.  
  832.  
  833.  
  834.  Name: STRIPRANGE
  835.  
  836.  Type: String / Generic
  837.  
  838.  Description:
  839.      Strips all characters in a given inclusive range from a given string.
  840.  
  841.  Usage:
  842.       char *striprange(str,lowchr,highchr)
  843.          char *str, lowchr, highchr;
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  Name: TOTALMEM
  867.  
  868.  Type: Equipment / MS C
  869.  
  870.  Description:
  871.      Returns the total amount of installed memory, in kilobytes.
  872.  
  873.  Usage:
  874.       #include <dos.h>
  875.       int totalmem()
  876.  
  877.  Oddities:
  878.      Uses a BIOS interrupt.
  879.  
  880.  
  881.  
  882.  
  883.  Name: UPCASE
  884.  
  885.  Type: String / Generic
  886.  
  887.  Description:
  888.      Convert a string to uppercase.
  889.  
  890.  Usage:
  891.       #include <ctype.h>
  892.       char *upcase(str)
  893.          char *str;
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.